Python列表、元组、集合、字典的操作及时间复杂度的比较 | 您所在的位置:网站首页 › python 列表转化为集合 › Python列表、元组、集合、字典的操作及时间复杂度的比较 |
列表 元组 字典 集合 是否可变 可变 不可变 可变 可变 是否有序 有序 有序 无序 无序 元素是否重复 可重复 可重复 键不可重复 不可重复 定义符号 [] () {key:value} {} 创建 1.[]直接创建 2.list() 3.列表解析式 1.()直接创建 2.tuple() 1.{}直接创建 2.dict(key1=value1) 3.dict(zip(list1,list2)) 1.set() (不可以使用{}来创建,那样是dict而不是set) 删除 1.del删除元素或者列表 2.list.remove(value) 3.list.pop() 1.del删除元素或元组 1.del删除元素或字典 2. 1.del删除元素或集合 2.set.remove() 3.set.pop() 4.set.clear() 修改插入 1.append() 2.insert() 3.+ 4.extend() 不可修改 1.dict[key]=value s.add() 访问、遍历 1.索引访问 2.for循环遍历 for i in list for index,i in enumerate(list) 1.索引访问 2.for循环遍历 1.键访问 2.get()访问 3.for key,value in dict.items() for key in dict.keys() for value in dict.values() for循环遍历 生成式 [i*i for i in list1]返回列表 (i*i for i in list1)返回生成器对象,通过for和next()访问 dict={i:j for i,j in zip(list1,list2)} dict={i*2:2 for i in range(1,10)} 交集&,并集|,差集- 切片 支持切片 支持切片 不支持切片 不支持切片 索引 支持索引 支持索引 不支持索引 不支持索引 +、* 支持 支持 不支持 不支持 其他 不能作为字典的键 可以作为字典的键
概括几点列表、字典、集合某些操作的时间复杂度比较: 1.查找速度快,无论dict有10个元素还是10万个元素,查找速度都一样。而list的查找速度随着元素增加而逐渐下降。 不过dict的查找速度快不是没有代价的,dict的缺点是占用内存大,还会浪费很多内容,list正好相反,占用内存小,但是查找速度慢。 2.字典值可以没有限制地取任何python对象,既可以是标准的对象,也可以是用户定义的,但键不行。不允许同一个键出现两次。 键必须不可变,所以可以用数字,字符串或元组充当,所以用列表就不行。 3.关于列表内部实现是数组(具体实现要看解析器, CPython的实现 ),因此就有数组的特点。超过容量会增加更多的容量,set, get 是O(1),但del, insert, in的性能是O(n)。具体的看下表,'n’是容器中当前的元素数, 'k’需要操作的元素个数; 关于字典需要了解的是hash函数和哈希桶。一个好的hash函数使到哈希桶中的值只有一个,若多个key hash到了同一个哈希桶中,称之为哈希冲突。查找值时,会先定位到哈希桶中,再遍历hash桶。更详细的信息请点这里。在hash基本没有冲突的情况下get, set, delete, in方面都是O(1)。自己的操作不会超过O(n); 关于set内部实现是dict的。在in操作上是O(1), 这一点比list要强。 也有list不存在的差运算;
|
CopyRight 2018-2019 实验室设备网 版权所有 |